﻿Public Class ABM_Cliente

    Dim acceso As New acceso
    Dim comando As New SqlClient.SqlCommand
    Dim esnuevo As Boolean
    Dim cliente As New Cliente()


    Private Sub ABM_Cliente_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        habilitacion(True)
        cargarGrilla()
        blanquear()
        esnuevo = True
        acceso.cargarCombo(cmb_tipoDoc, "TipoDocumento", "nombre", "idTipoDocumento")
        acceso.cargarCombo(cmb_provincia, "Provincia", "nombre", "idProvincia")
        acceso.cargarCombo(cmb_responsable_inscripto, "ResponsableInscripto", "nombre", "idResponsable")
        cmb_provincia.SelectedValue = 6
        txt_nombre.Focus()

    End Sub
    Private Sub cargarGrilla()

        Dim tabla As New Data.DataTable()
        tabla = acceso.leo_tabla("VistaClientes where nroCliente != 3")
        dgv_Clientes.DataSource = tabla
        acomodarGrilla()
    End Sub

    Private Sub acomodarGrilla()
        dgv_Clientes.Columns("nroCliente").HeaderText = "Nº Cliente"
        dgv_Clientes.Columns("cuit").HeaderText = "CUIT"
        dgv_Clientes.Columns("responsableInscripto").HeaderText = "Responsable Inscripto"
        dgv_Clientes.Columns("nombre").HeaderText = "Nombre Cliente"
        dgv_Clientes.Columns("apellido").HeaderText = "Apellido Cliente"
        dgv_Clientes.Columns("tipoDoc").HeaderText = "Tipo Documento"
        dgv_Clientes.Columns("documento").HeaderText = "Nº Documento"
        dgv_Clientes.Columns("email").HeaderText = "Email"
        dgv_Clientes.Columns("barrio").HeaderText = "Barrio"
        dgv_Clientes.Columns("calle").HeaderText = "Calle"
        dgv_Clientes.Columns("numero").HeaderText = "Numero"
        dgv_Clientes.Columns("piso").HeaderText = "Piso"
        dgv_Clientes.Columns("departamento").HeaderText = "Depto"
        dgv_Clientes.Columns("localidad").HeaderText = "Localidad"
        dgv_Clientes.Columns("provincia").HeaderText = "Provincia"
        dgv_Clientes.Columns("nroCliente").Width = 80
        dgv_Clientes.Columns("tipoDoc").Width = 50
        dgv_Clientes.Columns("documento").Width = 80
        dgv_Clientes.Columns("numero").Width = 40
        dgv_Clientes.Columns("piso").Width = 30
        dgv_Clientes.Columns("departamento").Width = 50
        dgv_Clientes.Columns("idTipoDocumento").Visible = False
        dgv_Clientes.Columns("idLocalidad").Visible = False
        dgv_Clientes.Columns("idProvincia").Visible = False
        dgv_Clientes.Columns("idPersona").Visible = False
        dgv_Clientes.Columns("idDireccion").Visible = False
        dgv_Clientes.Columns("idResponsable").Visible = False

    End Sub


    Private Sub habilitacion(ByVal x As Boolean)
        DatosCliente.Enabled = x
        btn_eliminar.Enabled = x
        btn_guardar.Enabled = x

    End Sub

    Private Sub cargarGrillaTelefonos()
        Dim tabla As New Data.DataTable()
        If txt_idPersona.Text = "" Then
            tabla = acceso.ejecutar("Select * FROM Vista_Telefonos Where idPersona is null")
        Else
            tabla = acceso.ejecutar("Select * FROM Vista_Telefonos Where idPersona = " & txt_idPersona.Text)
        End If
        dgv_Telefonos.DataSource = tabla
        acomodarGrillaTelefonos()

    End Sub
    Private Sub acomodarGrillaTelefonos()
        dgv_Telefonos.Columns("numero").HeaderText = "Telefono"
        dgv_Telefonos.Columns("numero").Width = 70
        dgv_Telefonos.Columns("nombre").HeaderText = "Tipo Telefono"
        dgv_Telefonos.Columns("nombre").Width = 100
        dgv_Telefonos.Columns("idTelefono").Visible = False
        dgv_Telefonos.Columns("idPersona").Visible = False
        dgv_Telefonos.Columns("idTipoTelefono").Visible = False
    End Sub
    Private Sub cmb_provincia_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmb_provincia.SelectedIndexChanged
        If cmb_provincia.SelectedIndex <> 0 Then
            cargaLocalidades(cmb_provincia.SelectedValue)
        End If
    End Sub

    Private Sub cargaLocalidades(ByVal idProvincia As String)

        cmb_localidad.DataSource = acceso.ejecutar("SELECT * FROM Localidad WHERE idProvincia = " + idProvincia + "Order by nombre")
        cmb_localidad.DisplayMember = "nombre"
        cmb_localidad.ValueMember = "idLocalidad"

    End Sub


    Private Sub blanquear()

        msk_cuit.Text = ""
        txt_nombre.Text = ""
        txt_apellido.Text = ""
        txt_email.Text = ""
        msk_nroDoc.Text = ""
        txt_calle.Text = ""
        msk_numeroCalle.Text = ""
        msk_piso.Text = ""
        txt_depto.Text = ""
        txt_barrio.Text = ""
        txt_idDireccion.Text = ""
        txt_idCliente.Text = ""
        txt_idPersona.Text = ""
        txt_idTelefono.Text = ""
        cmb_tipoDoc.SelectedValue = 1
        cmb_responsable_inscripto.SelectedValue = 1
        cmb_provincia.SelectedValue = 6
        dgv_Telefonos.DataSource = ""
        If dgv_Clientes.SelectedRows.Count <> 0 Then
            dgv_Clientes.ClearSelection()
        End If



    End Sub
    Private Sub btn_salir_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_salir.Click
        If MessageBox.Show("¿ Desea salir del ABM de Clientes ?", "Atención", MessageBoxButtons.YesNo, MessageBoxIcon.Question) = Windows.Forms.DialogResult.Yes Then
            Me.Close()
        End If
    End Sub
    Private Sub btn_nuevo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_nuevo.Click
        DatosCliente.Enabled = True
        blanquear()
        btn_guardar.Enabled = True
        msk_cuit.Focus()
        esnuevo = True
    End Sub

    Private Sub dgv_dgv_Clientes_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles dgv_Clientes.Click
        If dgv_Clientes.SelectedRows.Count <> 0 Then
            txt_idCliente.Text = dgv_Clientes.SelectedRows(0).Cells("nroCliente").Value.ToString
            txt_idPersona.Text = dgv_Clientes.SelectedRows(0).Cells("idPersona").Value
            txt_idDireccion.Text = dgv_Clientes.SelectedRows(0).Cells("idDireccion").Value
            msk_cuit.Text = dgv_Clientes.SelectedRows(0).Cells("cuit").Value
            cmb_responsable_inscripto.SelectedValue = dgv_Clientes.SelectedRows(0).Cells("idResponsable").Value
            txt_nombre.Text = dgv_Clientes.SelectedRows(0).Cells("nombre").Value.ToString
            txt_apellido.Text = dgv_Clientes.SelectedRows(0).Cells("apellido").Value.ToString
            cmb_tipoDoc.SelectedValue = dgv_Clientes.SelectedRows(0).Cells("idTipoDocumento").Value.ToString
            msk_nroDoc.Text = dgv_Clientes.SelectedRows(0).Cells("documento").Value
            txt_email.Text = dgv_Clientes.SelectedRows(0).Cells("email").Value
            txt_barrio.Text = dgv_Clientes.SelectedRows(0).Cells("barrio").Value
            txt_calle.Text = dgv_Clientes.SelectedRows(0).Cells("calle").Value
            msk_numeroCalle.Text = dgv_Clientes.SelectedRows(0).Cells("numero").Value
            msk_piso.Text = dgv_Clientes.SelectedRows(0).Cells("piso").Value
            txt_depto.Text = dgv_Clientes.SelectedRows(0).Cells("departamento").Value

            cmb_provincia.SelectedValue = dgv_Clientes.SelectedRows(0).Cells("idProvincia").Value
            cmb_localidad.SelectedValue = dgv_Clientes.SelectedRows(0).Cells("idLocalidad").Value
            esnuevo = False
            cargarGrillaTelefonos()
        End If

    End Sub


    Private Sub btn_guardar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_guardar.Click


        If msk_cuit.Text = "" Then
            MessageBox.Show("El campo CUIT no puede quedar vacio, porfavor escriba uno.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            msk_cuit.Focus()
            Return
        End If
        If txt_nombre.Text = "" Then
            MessageBox.Show("El campo Nombre de Cliente no puede quedar vacio, porfavor escriba uno.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txt_nombre.Focus()
            Return
        End If
        If txt_apellido.Text = "" Then
            MessageBox.Show("El campo Apellido no puede quedar vacio, porfavor escriba uno.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txt_apellido.Focus()
            Return
        End If
        If msk_nroDoc.Text = "" Then
            MessageBox.Show("El campo Número de Documento no puede quedar vacio, porfavor escriba uno.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            msk_nroDoc.Focus()
            Return
        End If
        If txt_email.Text = "" Then
            MessageBox.Show("El campo Email no puede quedar vacio, porfavor escriba uno.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txt_email.Focus()
            Return
        End If
        If cmb_localidad.SelectedIndex = -1 Then
            MessageBox.Show("Debe seleccionar alguna Localidad", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            cmb_localidad.Focus()
            Return
        End If
        If cmb_responsable_inscripto.SelectedIndex = -1 Then
            MessageBox.Show("Debe seleccionar alguna condición de Responsable Inscripto del cLiente", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            cmb_responsable_inscripto.Focus()
            Return
        End If
        If txt_barrio.Text = "" Then
            MessageBox.Show("El campo Barrio no puede quedar vacio, porfavor escriba uno.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txt_barrio.Focus()
            Return
        End If
        If txt_calle.Text = "" Then
            MessageBox.Show("El campo Calle no puequede quedar vacio, porfavor escriba uno.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            txt_calle.Focus()
            Return
        End If
        If msk_numeroCalle.Text = "" Then
            MessageBox.Show("El campo Nro. no puede quedar vacio, porfavor escriba uno.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            msk_numeroCalle.Focus()
            Return
        End If
        'If msk_piso.Text = "" Then
        '    MessageBox.Show("El campo Piso no puequede quedar vacio, porfavor escriba uno.", "Atención", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
        '    msk_piso.Focus()
        '    Return
        'End If


        cliente._cuit = msk_cuit.Text
        cliente._Responsable._idResponsable = Int(cmb_responsable_inscripto.SelectedValue)
        cliente._nombre = txt_nombre.Text
        cliente._apellido = txt_apellido.Text
        cliente._tipoDocumento._idTipoDocumento = Int(cmb_tipoDoc.SelectedValue)
        cliente._documento = msk_nroDoc.Text
        cliente._email = txt_email.Text
        cliente._direccion._calle = txt_calle.Text
        cliente._direccion._numero = msk_numeroCalle.Text
        cliente._direccion._barrio = txt_barrio.Text
        If msk_piso.Text = "" Then
            cliente._direccion._piso = 0
        Else
            cliente._direccion._piso = msk_piso.Text
        End If

        cliente._direccion._departamento = txt_depto.Text
        cliente._direccion._localidad._idLocalidad = Int(cmb_localidad.SelectedValue.ToString)
        cliente._direccion._localidad._provincia._idProvincia = Int(cmb_provincia.SelectedValue.ToString)

        If esnuevo = True Then
            insertCliente(cliente)
            MessageBox.Show("Nuevo Cliente cargado con exito", "ATENCION", MessageBoxButtons.OK, MessageBoxIcon.None)
            cargarGrilla()
            blanquear()
        Else
            cliente._idCliente = txt_idCliente.Text
            cliente._direccion._idDireccion = txt_idDireccion.Text
            cliente._idPersona = txt_idPersona.Text
            updateCliente(cliente)
            MessageBox.Show("Cliente actualizado con exito", "ATENCION", MessageBoxButtons.OK, MessageBoxIcon.None)
            cargarGrilla()
            blanquear()
        End If
    End Sub

    Public Sub insertCliente(ByVal cliente As Cliente)
        Dim sql As String
        Dim tabla As Data.DataTable
        'Creo cadena de insercion para cargar la tabla Direccion
        sql = "Insert INTO Direccion (calle,numero,idLocalidad,barrio,piso,departamento)"
        sql &= " VALUES (@calle,@numero,@idLocalidad,@barrio,@piso,@departamento)"
        comando = New Data.SqlClient.SqlCommand
        comando.Parameters.AddWithValue("@calle", cliente._direccion._calle)
        comando.Parameters.AddWithValue("@numero", cliente._direccion._numero)
        comando.Parameters.AddWithValue("@idLocalidad", cliente._direccion._localidad._idLocalidad)
        comando.Parameters.AddWithValue("@barrio", cliente._direccion._barrio)
        comando.Parameters.AddWithValue("@piso", cliente._direccion._piso)
        comando.Parameters.AddWithValue("@departamento", cliente._direccion._departamento)
        acceso.ejecutarActualizaciones(sql, comando)

        'Creo cadena de insercion para cargar la tabla Persona
        tabla = acceso.ejecutar("SELECT * FROM Direccion WHERE IdDireccion = IDENT_CURRENT('Direccion')")
        Dim idDireccion As String = tabla.Rows.Item(0).Item(0).ToString()
        sql = "Insert INTO Persona (nombre,apellido,email,documento,idTipoDocumento,idDireccion)"
        sql &= " VALUES (@nombre , @apellido ,@email,@documento,@idTipoDocumento, @idDireccion)"
        comando = New Data.SqlClient.SqlCommand
        comando.Parameters.AddWithValue("@nombre", cliente._nombre)
        comando.Parameters.AddWithValue("@apellido", cliente._apellido)
        comando.Parameters.AddWithValue("@email", cliente._email)
        comando.Parameters.AddWithValue("@documento", cliente._documento)
        comando.Parameters.AddWithValue("@idTipoDocumento", cliente._tipoDocumento._idTipoDocumento)
        comando.Parameters.AddWithValue("@idDireccion", idDireccion)
        acceso.ejecutarActualizaciones(sql, comando)

        'Creo cadena de insercion para cargar la tabla Telefono
        tabla = acceso.ejecutar("SELECT * FROM Persona WHERE IdPersona = IDENT_CURRENT('Persona')")
        Dim idPersona As String = tabla.Rows.Item(0).Item(0).ToString()
        sql = "UPDATE Telefono SET idPersona = @idPersona where idPersona is NULL"
        comando = New Data.SqlClient.SqlCommand
        comando.Parameters.AddWithValue("@idPersona", idPersona)
        acceso.ejecutarActualizaciones(sql, comando)

        'Creo cadena de insercion para cargar la tabla Cliente
        ' tabla = acceso.ejecutar("SELECT * FROM Persona WHERE IdPersona = IDENT_CURRENT('Persona')")
        sql = "Insert INTO Cliente (idPersona, cuit, idResponsable)"
        sql &= " VALUES (@idPersona, @cuit, @idResponsable)"
        comando = New Data.SqlClient.SqlCommand
        comando.Parameters.AddWithValue("@idPersona", idPersona)
        comando.Parameters.AddWithValue("@cuit", cliente._cuit)
        comando.Parameters.AddWithValue("@idResponsable", cliente._Responsable._idResponsable)

        acceso.ejecutarActualizaciones(sql, comando)
    End Sub

    Public Sub updateCliente(ByVal cliente As Cliente)
        Dim sql As String

        sql = "UPDATE Persona SET nombre = @nombre,apellido = @apellido,email = @email,documento = @documento,idTipoDocumento = @idTipoDocumento,idDireccion = @idDireccion where idPersona=@idPersona"
        comando = New Data.SqlClient.SqlCommand
        comando.Parameters.AddWithValue("@idPersona", cliente._idPersona.ToString)
        comando.Parameters.AddWithValue("@nombre", cliente._nombre)
        comando.Parameters.AddWithValue("@apellido", cliente._apellido)
        comando.Parameters.AddWithValue("@email", cliente._email)
        comando.Parameters.AddWithValue("@documento", cliente._documento)
        comando.Parameters.AddWithValue("@idTipoDocumento", cliente._tipoDocumento._idTipoDocumento)
        comando.Parameters.AddWithValue("@idDireccion", cliente._direccion._idDireccion)
        acceso.ejecutarActualizaciones(sql, comando)

        sql = "UPDATE Cliente SET cuit = @cuit,idResponsable = @idResponsable where idPersona=@idPersona"
        comando = New Data.SqlClient.SqlCommand
        comando.Parameters.AddWithValue("@idPersona", cliente._idPersona.ToString)
        comando.Parameters.AddWithValue("@cuit", cliente._cuit)
        comando.Parameters.AddWithValue("@idResponsable", cliente._Responsable._idResponsable)
        acceso.ejecutarActualizaciones(sql, comando)

        sql = "UPDATE Direccion SET calle = @calle,numero = @numero,idLocalidad = @idLocalidad,barrio = @barrio,piso = @piso,departamento = @departamento where idDireccion= @idDireccion"
        comando = New Data.SqlClient.SqlCommand
        comando.Parameters.AddWithValue("@idDireccion", cliente._direccion._idDireccion.ToString)
        comando.Parameters.AddWithValue("@calle", cliente._direccion._calle)
        comando.Parameters.AddWithValue("@numero", cliente._direccion._numero)
        comando.Parameters.AddWithValue("@idLocalidad", cliente._direccion._localidad._idLocalidad)
        comando.Parameters.AddWithValue("@barrio", cliente._direccion._barrio)
        comando.Parameters.AddWithValue("@piso", cliente._direccion._piso)
        comando.Parameters.AddWithValue("@departamento", cliente._direccion._departamento)
        acceso.ejecutarActualizaciones(sql, comando)
    End Sub


    Private Sub btn_eliminar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_eliminar.Click
        If dgv_Clientes.SelectedRows.Count <> 0 Then
            cliente._idCliente = dgv_Clientes.SelectedRows(0).Cells("idCliente").Value
            cliente._nombre = dgv_Clientes.SelectedRows(0).Cells("nombre").Value
            cliente._apellido = dgv_Clientes.SelectedRows(0).Cells("apellido").Value
            cliente._idPersona = dgv_Clientes.SelectedRows(0).Cells("idPersona").Value
            cliente._direccion._idDireccion = dgv_Clientes.SelectedRows(0).Cells("idDireccion").Value
            If MessageBox.Show("Esta seguro de querer eliminar el cliente: " & cliente._nombre & vbLf & " con ID: " & cliente._idCliente, "ATENCION", MessageBoxButtons.YesNo, MessageBoxIcon.Warning) = Windows.Forms.DialogResult.Yes Then
                Dim sql As String
                'AL ESTAR EN VARIAS TABLAS LOS VALORES DEEBEN ELIMIARSE EN CADA UNA POR SEPARADO Y EN ORDEM, 
                '1-PROVEEDOR
                '2-TELEFONO
                '3-PERSONA
                '4-DIRECCION
                sql = "DELETE Cliente WHERE idCliente = @idCliente"
                comando = New Data.SqlClient.SqlCommand
                comando.Parameters.AddWithValue("@idCliente", cliente._idCliente)
                acceso.ejecutarActualizaciones(sql, comando)

                sql = "DELETE Telefono WHERE idPersona = @idPersona"
                comando = New Data.SqlClient.SqlCommand
                comando.Parameters.AddWithValue("@idPersona", cliente._idPersona)
                acceso.ejecutarActualizaciones(sql, comando)

                sql = "DELETE Persona WHERE idPersona = @idPersona"
                comando = New Data.SqlClient.SqlCommand
                comando.Parameters.AddWithValue("@idPersona", cliente._idPersona)
                acceso.ejecutarActualizaciones(sql, comando)

                sql = "DELETE Direccion WHERE idDireccion = @idDireccion"
                comando = New Data.SqlClient.SqlCommand
                comando.Parameters.AddWithValue("@idDireccion", cliente._direccion._idDireccion)
                acceso.ejecutarActualizaciones(sql, comando)

                cargarGrilla()
                blanquear()
                esnuevo = True

            End If

        End If
    End Sub
    Private Sub txt_depto_KeyUp(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyEventArgs) Handles txt_depto.KeyUp

        txt_depto.Text = txt_depto.Text.ToUpper
        txt_depto.Select(txt_depto.Text.Length, 0)
    End Sub

    Public Sub validarTextBox(ByVal e As System.Windows.Forms.KeyPressEventArgs)
        If Char.IsLetter(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsControl(e.KeyChar) Then
            e.Handled = False
        ElseIf Char.IsSeparator(e.KeyChar) Then
            e.Handled = False
        Else
            e.Handled = True
        End If
    End Sub

    Private Sub txt_nombre_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_nombre.KeyPress
        validarTextBox(e)
    End Sub

    Private Sub txt_apellido_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_apellido.KeyPress
        validarTextBox(e)
    End Sub

    Private Sub txt_barrio_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_barrio.KeyPress
        validarTextBox(e)
    End Sub

    Private Sub txt_calle_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs) Handles txt_calle.KeyPress
        validarTextBox(e)
    End Sub


    Private Sub btn_Telefonos_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btn_Telefonos.Click
        Dim idPers As Integer
        If txt_idPersona.Text = "" Then
            idPers = Nothing
        Else
            idPers = txt_idPersona.Text
        End If
        Dim Telefonos As New ABM_Telefonos()
        Telefonos._idPersona = idPers
        Telefonos.ShowDialog()
        cargarGrillaTelefonos()
    End Sub


    Private Sub cmb_localidad_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmb_localidad.Leave
        If cmb_localidad.SelectedIndex = -1 Then
            cmb_localidad.Focus()
        End If
    End Sub

    Private Sub cmb_provincia_Leave(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles cmb_provincia.Leave
        If cmb_provincia.SelectedIndex = -1 Then
            cmb_provincia.Focus()
        End If
        If cmb_provincia.SelectedIndex <> -1 Then
            cargaLocalidades(cmb_provincia.SelectedValue)
        End If
    End Sub


    


End Class